import { CreationOptional, InferAttributes, InferCreationAttributes } from 'sequelize'
import {
    AllowNull,
    AutoIncrement,
    Column,
    CreatedAt,
    DataType,
    Default,
    Index,
    Model,
    PrimaryKey,
    Table,
    Unique,
    UpdatedAt,
} from 'sequelize-typescript'
import { TokenType } from '~/constants/TokenType'

/**
 * 账号凭据表实体
 */
@Table({ freezeTableName: true })
export class Token extends Model<InferAttributes<Token>, InferCreationAttributes<Token>> {
    /**
     * 自增id
     */
    @PrimaryKey
    @AutoIncrement
    @Column(DataType.INTEGER({ unsigned: true }))
    declare id: CreationOptional<number>

    /**
     * 账号appid
     */
    @Unique('token')
    @AllowNull(false)
    @Column(DataType.STRING(50))
    declare app_id: string

    /**
     * 托管到的第三方平台id（如果有）
     */
    @Unique('token')
    @Default('')
    @AllowNull(false)
    @Column(DataType.STRING(50))
    declare component_app_id: CreationOptional<string>

    /**
     * 凭据类型
     */
    @Unique('token')
    @AllowNull(false)
    @Column(DataType.STRING(50))
    declare type: TokenType

    /**
     * 凭据值
     */
    @Column(DataType.TEXT)
    declare token: string

    /**
     * 过期时间
     */
    @Index
    @Column(DataType.DATE)
    declare expire_time: Date | null

    /**
     * 创建时间
     */
    @CreatedAt
    @AllowNull(false)
    @Column(DataType.DATE)
    declare create_time: CreationOptional<Date>

    /**
     * 更新时间
     */
    @UpdatedAt
    @AllowNull(false)
    @Column(DataType.DATE)
    declare update_time: CreationOptional<Date>
}
